Webframeworkk/ASP.NET Core/xUnit
Dieses Tutorial gibt dir einen Überblick über Unit Testing, Best Practices und die Verwendung des xUnit-Frameworks in .NET.
1. Einführung in Unit Testing
Unit Testing (Modultests) ist eine Softwareentwicklungspraxis, bei der einzelne Einheiten (meist Klassen oder Methoden) isoliert vom Rest der Anwendung getestet werden.
Vorteile von Unit Testing
- Fehler frühzeitig finden: Probleme werden bereits im Entwicklungszyklus erkannt und behoben.
- Sicher Refactoren: Änderungen am Code können mit Vertrauen vorgenommen werden, da Tests sofort melden, wenn etwas kaputt geht.
- Besseres Design: Es führt zu modularerem und lose gekoppeltem Code.
- Lebendige Dokumentation: Tests zeigen, wie der Code verwendet werden soll.
2. Das xUnit Framework
xUnit ist ein populäres Open-Source-Framework für Unit Testing in .NET. Es bietet Attribute und Assertions, um Tests einfach zu organisieren.
Warum xUnit?
- Erweiterbarkeit: Erlaubt benutzerdefinierte Attribute und Assertions.
- Community: Große Community mit viel Support.
- Integration: Nahtlose Einbindung in Visual Studio, ReSharper und Build-Server.
- Performance: Bekannt für Geschwindigkeit und Effizienz.
- Kombination mit Moq: Lässt sich ideal mit dem Mocking-Framework "Moq" kombinieren.
3. Best Practices für Unit Testing
Um effektive Tests zu schreiben, solltest du folgende Regeln beachten:
- Isolation: Teste jede Einheit isoliert. Nutze Mocking-Frameworks (wie Moq oder NSubstitute), um Abhängigkeiten zu simulieren.
- AAA-Muster (Arrange-Act-Assert):
- Arrange: Bereite die Testdaten und Eingaben vor.
- Act: Führe den zu testenden Code aus.
- Assert: Überprüfe, ob das Ergebnis den Erwartungen entspricht.
- Ein Assert pro Test: Konzentriere dich darauf, pro Test nur ein spezifisches Verhalten zu validieren.
- Klare Benennung: Verwende aussagekräftige Namen für Testklassen und Methoden.
- Test-Doubles: Nutze Mocks, Stubs oder Fakes, um Abhängigkeiten zu kontrollieren.
- Randfälle testen: Vergiss nicht, Grenzwerte und ungewöhnliche Eingaben zu prüfen.
- Keine externen Systeme: Teste in Unit Tests keine Datenbanken, Dateisysteme oder Netzwerkdienste direkt (Mocking!).
- Schnelle Tests: Unit Tests sollten in Millisekunden laufen.
4. Praktische Test-Szenarien
Hier sind Beispiele für Testlogik, die du mit xUnit umsetzen kannst:
Country Service Tests
Die folgenden Szenarien sollten für den Country-Service abgedeckt werden:
- AddCountry:
- Validierung des
CountryAddRequest(darf nicht null sein). - Konvertierung in den Typ
Country. - Generierung einer neuen ID.
- Hinzufügen zur Liste und Rückgabe der Response.
- Validierung des
- GetAllCountries:
- Konvertierung der Liste in
CountryResponse.
- Konvertierung der Liste in
- GetCountryByCountryID:
- Prüfung der ID auf null.
- Suche in der Liste und Rückgabe des Ergebnisses.
Person Service Tests
Für den Person-Service sind ähnliche Tests sinnvoll:
- AddPerson: Validierung, Konvertierung, ID-Generierung und Speicherung.
- GetPersonByPersonID: Suche anhand der GUID.
- GetAllPersons: Rückgabe aller Personen als Response-Objekte.
- GetFilteredPersons: Suche basierend auf Suchbegriffen (
searchBy,searchString). - GetSortedPersons: Sortierung der Liste nach bestimmten Kriterien.
- UpdatePerson: Bestehendes Objekt finden, validieren, Daten aktualisieren und zurückgeben.
- DeletePerson: Objekt finden und aus der Liste entfernen.
Dieses Tutorial dient als Grundlage für sauberes und effektives Unit Testing in deinen .NET-Projekten!